// Memory layout 内存布局

#define EXTMEM  0x100000            // Start of extended memory             1M 扩展内存的初始处
#define PHYSTOP 0xE000000           // Top physical memory                  本操作系统最大支持的内存  224M
#define DEVSPACE 0xFE000000         // Other devices are at high addresses  高地址上其他设备

// Key addresses for address space layout (see kmap in vm.c for layout)
// 地址空间中关键地址
#define KERNBASE 0x80000000         // First kernel virtual address    2G 内核虚拟地址开始处
#define KERNLINK (KERNBASE+EXTMEM)  // Address where kernel is linked  内核被链接到的地址，就是启动时前1M的空间

#define V2P(a) (((uint) (a)) - KERNBASE)
#define P2V(a) ((void *)(((char *) (a)) + KERNBASE))                   // 物理地址转换到虚拟地址

#define V2P_WO(x) ((x) - KERNBASE)    // same as V2P, but without casts     得到第一次映射后的物理地址???
#define P2V_WO(x) ((x) + KERNBASE)    // same as P2V, but without casts     与上面有什么不一样：无类型转换
